//package com.ossjk.core.util;
//
//import io.jsonwebtoken.ExpiredJwtException;
//import io.jsonwebtoken.JwtBuilder;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import org.apache.commons.codec.binary.Base64;
//import org.apache.commons.lang3.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.crypto.SecretKey;
//import javax.crypto.spec.SecretKeySpec;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * jwt工具类
// * 
// * @Author chair
// * @Version 1.0, 2017年8月20日
// * @See
// * @Since com.jk.bestbaby.util
// * @Description: TODO
// */
//public class JwtUtil {
//
//	private static String jwtSecret = "ossjk";
//	private static final Logger log = LoggerFactory.getLogger(JwtUtil.class);
//
//	/**
//	 * 由字符串生成加密key
//	 *
//	 * @return
//	 */
//	public static SecretKey generalKey() {
//		String stringKey = jwtSecret;
//		byte[] encodedKey = Base64.decodeBase64(stringKey);
//		SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
//		return key;
//	}
//
//	/**
//	 * 创建token
//	 * 
//	 * @param id
//	 * @param subject
//	 * @param ttlMillis
//	 * @return
//	 * @throws Exception
//	 */
//	public static String getToken(String id, String subject, long ttlMillis) {
//		SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//		long nowMillis = System.currentTimeMillis();
//		Date now = new Date(nowMillis);
//		SecretKey key = generalKey();
//		// header Map
//		Map<String, Object> header = new HashMap();
//		header.put("alg", "HS256");
//		header.put("typ", "JWT");
//		JwtBuilder builder = Jwts.builder().setHeader(header).setId(UuidUtil.getUUID()).setIssuedAt(now).setSubject(subject).claim("id", id).signWith(signatureAlgorithm, key);
//		if (ttlMillis >= 0) {
//			long expMillis = nowMillis + ttlMillis;
//			Date exp = new Date(expMillis);
//			builder.setExpiration(exp);
//		}
//		return builder.compact();
//	}
//
//	private static Map getClaimsMap(String token) {
//		if ("null".equals(token) || StringUtils.isBlank(token)) {
//			return null;
//		}
//		try {
//			Map<String, Object> jwtClaims = Jwts.parser().setSigningKey(generalKey()).parseClaimsJws(token).getBody();
//			return jwtClaims;
//		} catch (ExpiredJwtException e) {
//			log.error("{}已过期", token);
//		} catch (Exception e) {
//			log.error("{}", e);
//		}
//		return null;
//	}
//
//	/**
//	 * 获取token过期时间
//	 * 
//	 * @param token
//	 * @return
//	 * @throws Exception
//	 */
//	public static Date getTokenTimeOut(String token) {
//		// 解释token
//		Map claims = getClaimsMap(token);
//		if (CommonUtil.isBlank(claims)) {
//			return null;
//		}
//		Object expObj = claims.get("exp");
//		String exp = expObj.toString();
//		// exp转换时间
//		Long timestamp = Long.parseLong(exp) * 1000;
//		Date expDate = new Date(timestamp);
//		return expDate;
//	}
//
//	/**
//	 * 获取当前用户id
//	 * 
//	 * @return
//	 * @throws Exception
//	 */
//	public static String getUserId(String token) {
//		Map claims = getClaimsMap(token);
//		if (CommonUtil.isBlank(claims)) {
//			return null;
//		}
//		return (String) claims.get("id");
//	}
//
//	public static void main(String[] args) {
//		String token = JwtUtil.getToken("123456", "chair", 1000 * 2);
//		try {
//			Thread.sleep(3 * 1000);
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		System.out.println(getTokenTimeOut(token));
//	}
//}
